<?php
###########################################################################
#  Copyright (C) 2006-2007 Glyphix, Inc. <briz@glyphix.com>               #
#                                                                         #
#  Permission is hereby granted, free of charge, to any person obtaining  #
#  a copy of this software and associated documentation files (the        #
#  "Software"), to deal in the Software without restriction, including    #
#  without limitation the rights to use, copy, modify, merge, publish,    #
#  distribute, sublicense, and/or sell copies of the Software, and to     #
#  permit persons to whom the Software is furnished to do so, subject to  #
#  the following conditions:                                              #
#                                                                         #
#  The above copyright notice and this permission notice shall be         #
#  included in all copies or substantial portions of the Software.        #
#                                                                         #
#  Except as contained in this notice, the name(s) of the above           #
#  copyright holders shall not be used in advertising or otherwise to     #
#  promote the sale, use or other dealings in this Software without       #
#  prior written authorization.                                           #
#                                                                         #
#  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        #
#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     #
#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. #
#  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR      #
#  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,  #
#  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR  #
#  OTHER DEALINGS IN THE SOFTWARE.                                        #
###########################################################################

/**
 * GXModule
 *
 * A base class for creating GXPage modules. Modules have configuration blocks
 * in System.xml which are automatically provided to your module code constructor on instantiation.
 * To create your own module, extend this class.
 * @author		Brad Brizendine <briz@glyphix.com>
 * @link		http://www.glyphix.com/
 * @license		http://opensource.org/licenses/bsd-license.php BSD License
 * @version		1.0
 * @package		GXPage
 * @subpackage	Engine
 * @copyright	Copyright 2006 - 2007, Glyphix, Inc.
 */

abstract class GXModule {

	protected $GXPage;
	protected $SystemConfig;
	protected $SiteConfig;

	public function __construct(){
		$this->GXPage		= GXPage::getInstance();
		$this->GXObject		= GXObject::getInstance();
		// include the system and site configs
		$this->SystemConfig	= GXPage::get('SystemConfig');
		$this->SiteConfig	= GXPage::get('SiteConfig');
		if( !$this->SystemConfig || !$this->SiteConfig ){
			trigger_error( 'Missing Config', E_USER_ERROR );
			return false;
		}
		return true;
	}

	/**
	 * getval
	 *
	 * Centralizes a simple function to return a value for a node,
	 * while avoiding PHP E_STRICT errors.
	 * @param object $config the GXDOM config for this module
	 * @param string $xpath what to look for
	 * @return string or null
	 */
	protected function getval( $config = null, $xpath = null ){
		$obj = $config->exec->xpath($xpath, 0);
		return ($obj ? $obj->nodeValue : null);
	}

	protected function getatt($config = null, $xpath = null, $name = null){
		$obj = $config->exec->xpath($xpath, 0);
		if( ! $obj){
			return false;
		}

		// use gxdom's special attributes function to grab the named value
		return ($obj ? $obj->attributes[$name] : null);
	}

}

?>